package com.lancoo.lancooimageloader;

import android.app.Application;
import android.content.Context;
import android.widget.ImageView;

import com.lancoo.lancooimageloader.glide.GlideLoaderImpl;
import com.lancoo.lancooimageloader.xutils3.xUtilsImageCallback;
import com.lancoo.lancooimageloader.xutils3.xUtilsLoaderImpl;

import org.xutils.image.ImageOptions;
import org.xutils.x;

/**
 * Author: Andecy
 * Time: 2017/5/11
 * Email: andecy@foxmail.com
 * Description: 蓝鸽图片加载工具
 */

public class LancooImageLoader {

    private static LancooImageManager mLoader;
    private static LancooImageManager mLoader2;
    private static Context mContext;

    public static void init(Application application) {
        x.Ext.init(application);
        mContext = application.getApplicationContext();
    }

    public static Context getContex() {
        return mContext;
    }

    public static LancooImageManager image() {
        return imageByxUtils();
//        return imageByGlide();
    }


    public static LancooImageManager imageByxUtils() {
        if (mLoader == null) {
            mLoader = new xUtilsLoaderImpl();
        }
        return mLoader;
    }

    public static LancooImageManager imageByGlide() {
        if (mLoader2 == null) {
            mLoader2 = new GlideLoaderImpl(mContext);
        }
        return mLoader2;
    }

    /**
     * 最简单的加载图片方法.
     * <p>
     * 出于对可扩展性的考虑，此方法已不推荐使用.
     *
     * @param view 显示图片的ImageView
     * @param url  图片的路径
     * @see LancooImageManager#load(ImageView, String)
     * @deprecated 请使用 {@link #image()} 调用上述方法.
     */
    @Deprecated
    public static void load(ImageView view, String url) {
        x.image().bind(view, url);
    }

    /**
     * 含有设置项的加载图片方法.
     * <p>
     * 出于对可扩展性的考虑，此方法已不推荐使用.
     *
     * @param view    显示图片的ImageView
     * @param url     图片的路径
     * @param options 设置项
     * @see LancooImageManager#load(ImageView, String, LancooImageOptions)
     * @deprecated 请使用 {@link #image()} 调用上述方法.
     */
    @Deprecated
    public static void load(ImageView view, String url, LancooImageOptions options) {
        OptionConverter converter = options.getConverter();
        if (converter.getImageOptions() instanceof ImageOptions) {
            x.image().bind(view, url, (ImageOptions) converter.getImageOptions());
        }
    }

    /**
     * 含有回调的的加载图片方法.
     * <p>
     * 出于对可扩展性的考虑，此方法已不推荐使用.
     *
     * @param view     显示图片的ImageView
     * @param url      图片的路径
     * @param callback 图片加载状态回调
     * @see LancooImageManager#load(ImageView, String, LancooImageCallback)
     * @deprecated 请使用 {@link #image()} 调用上述方法.
     */
    @Deprecated
    public static void load(ImageView view, String url, final LancooImageCallback callback) {
        x.image().bind(view, url, new xUtilsImageCallback(callback));
    }

    /**
     * 含有设置项与回调的加载图片方法.
     * <p>
     * 出于对可扩展性的考虑，此方法已不推荐使用.
     *
     * @param view     显示图片的ImageView
     * @param url      图片的路径
     * @param options  设置项
     * @param callback 图片加载状态回调
     * @see LancooImageManager#load(ImageView, String, LancooImageOptions, LancooImageCallback)
     * @deprecated 请使用 {@link #image()} 调用上述方法.
     */
    @Deprecated
    public static void load(ImageView view, String url, LancooImageOptions options, LancooImageCallback callback) {
        OptionConverter converter = options.getConverter();
        if (converter.getImageOptions() instanceof ImageOptions) {
            x.image().bind(view, url, (ImageOptions) converter.getImageOptions(), new xUtilsImageCallback(callback));
        }
    }

    /**
     * 清除内存缓存.
     * <p>
     * 出于对可扩展性的考虑，此方法已不推荐使用.
     *
     * @see LancooImageManager#clearMemCache()
     * @deprecated 请使用 {@link #image()} 调用上述方法.
     */
    @Deprecated
    public static void clearMemCache() {
        x.image().clearMemCache();
    }

    /**
     * 清除所有(内存&本地)缓存文件.
     * <p>
     * 出于对可扩展性的考虑，此方法已不推荐使用.
     *
     * @see LancooImageManager#clearCacheFiles()
     * @deprecated 请使用 {@link #image()} 调用上述方法.
     */
    @Deprecated
    public static void clearCacheFiles() {
        x.image().clearCacheFiles();
    }
}
